package com.cy.pj.sys.web.interceptor;

import org.omg.SendingContext.RunTime;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.time.LocalTime;
import java.util.Map;

/**
 * 定义spring web 模块中的拦截器，通过此拦截器对handler中某些方法的
 * 进行时间访问限制。
 */
public class TimeAccessInterceptor implements HandlerInterceptor {
    /**preHandle方法会在目标handler方法执行之前进行访问拦截
     * 方法返回值为true时表示请求放行，false表示请求到此结束，
     * 不再去执行handler中的方法
     * */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        //testRequestInfo(request,handler);

        LocalTime now= LocalTime.now();//jdk8中的时间对象
        int hour=now.getHour();//获取当前时间的小时
        System.out.println("hour="+hour);
        if (hour<6||hour>=22){
            throw new RuntimeException("请在6-10点进行访问");
        }
        return true;
    }

    public void testRequestInfo(HttpServletRequest request,
                                Object handler){
        //获取请求参数
        Map<String,String[]> map=request.getParameterMap();
        System.out.println("request.param.mapkeys="+map.keySet());
        //获取封装了目标Handler(@Controller)和method信息的HandlerMethod对象
        HandlerMethod handlerMethod= (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        System.out.println("method.name="+method.getName());
        System.out.println("==preHandle==");
    }
}
